import pandas as pd
import csv,sys

def date_time_split(text):
    #这里定义一个用于区分日期和时间的函数，已知日期时间表达为："%Y-%m-%d %H:%M:%S"
    index1 = text.index(' ') if (' ' in text) else -1
    #判断字符中的空格位置，若不存在返回-1
    date1 = text[0:index1]
    time2 = text[index1+1:]
    #根据空格位置区分日期和时间
    return date1,time2
#返回一个关于日期和时间的元组

def main_fuction(index, lists, sign):
    #定义主要的数据处理，将“收/支”区分
    c1 = lists[index + 1]
    #参考下个函数
    c2 = c1.replace('¥', sign)
    #将'¥'替换更为指定符号
    del lists[index]
    del lists[index]
    #分两部删除多余的数据
    lists.append(c2)
    #将处理好的数据加入到原列表中

def out_in_split(lists):
    try:
        index1 = lists.index('收入') if ('收入' in lists) else -1
        # 判断字符中的‘收入’位置，若不存在返回-1
        if index1 >= 0:
            main_fuction(index1, lists, '+')
            #通过‘收入’位置确定消费数额，并设定为正值
        if index1 == -1:
            index2 = lists.index('支出') if ('支出' in lists) else -1
            if index2 >= 0:
                main_fuction(index2, lists, '-')
            else:
                index3 = lists.index('/') if ('/' in lists) else -1
                main_fuction(index3, lists, '-')
                ##判断字符中的‘/’位置，同时设定为负值
    except:
        print('error\n')
        #讨厌Error

    try:
        #害怕出现Error再来一次
        return lists
    except UnboundLocalError:
        pass

def get_csv_data(csv_path):
    line0,line1,line2,line3 =[],[],[],[]
    #设定空列表
    with open(csv_path, 'r', encoding='UTF-8-sig') as file:
        r2 = csv.reader(file)
        #读取.csv文件
        for item in r2:
            line0.append(item)
        for i in range(0,17):
            print(line0[i])
        del line0[0:17]
        for data in line0:
            d2 = [data[0],data[4],data[5]]
            e0 = out_in_split(d2)
            e1 = e0[0]
            y = list(date_time_split(e1))
            line1.append(y[0])
            line2.append(y[1])
            line3.append(e0[1])
        '''
        这里数据处理逻辑为：先读取每行的信息为列表，将全部列表加入到一个空列表中，打印多余的字符后删除其对应列表
        之后数据为统一的格式列表，调用out_in_split(lists)，date_time_split(text)函数处理所需要的数据
        返回三个对应数据类型的列表
        '''
        try:
            test =  pd.DataFrame({'date':line1,'time':line2,'consumption':line3})
            #将三个列表的内容按照顺序导入到矩阵中
            test.to_csv('./test.csv', index=None, encoding='utf8')
            #输出整理的文件为test.csv到当前py目录中
        except:
            print('error')
    return

if __name__ == '__main__':
    path = input('your csv_file_path')
    get_csv_data(path)
    sys.exit(1)

